﻿using System;
using System.Collections.Generic;
using Gp.Scripts.Equip;
using Gp.Scripts.Core;
using Sirenix.OdinInspector;
using UnityEngine;

namespace Gp.Scripts.Data.Equip {
    public enum ShieldLevel {
        [LabelText("大")]
        Huge,
        [LabelText("中")]
        Middle,
        [LabelText("小")]
        Small,
    }
    
    
    [WeaponType(WeaponBasicType.Misc, "护盾")]
    [Tooltip("护盾是一种特殊的武器，能够帮助自己和身后的队友阻挡远程攻击。")]
    [Serializable]
    public class ShieldWeaponType : BaseWeaponType {
        public override WeaponBasicType WeaponBasicType => WeaponBasicType.Misc;

        [LabelText("伤害")]
        public int damage = 0;
        [LabelText("护甲值")]
        public int defencePoint = 50;
        [LabelText("盾牌类型")]
        public ShieldLevel shieldLevel;


        public override WeaponTypeInfo BuildInfo(WeaponEntity entity) {
            return new ShieldWeaponInfo(this, entity);
        }
        
        
        
        // /// <summary>
        // /// 近战武器目标选择：
        // /// 1、发起者需要位于1、2号位
        // /// 2、近战武器在对方1、2号位有人时，只能对1、2号位的敌方单位进行攻击。
        // /// </summary>
        // public override List<AttachCell> GetTargets(UnitAbilityContext context) {
        //     var res = new List<AttachCell>();
        //     // 当前单位位置
        //     var unitPos = context.UnitPos.Index;
        //     // 如果不在近战攻击位
        //     if (!MeleeBaseWeaponType.MeleePos.Contains(unitPos))
        //         return res;
        //
        //
        //     var temp = 2 - unitPos;
        //
        //     // 在范围内、且位于近战位的目标，最多为2名
        //     var placeHolder = CellGridSystem.Instance.PlaceHolder;
        //
        //
        //     // 当对方近战位有单位时，只能攻击近战位
        //     for (int i = 0; i < MeleeBaseWeaponType.MeleePos.Count; i++) {
        //         var unit = placeHolder.GetUnit(context.Targets[i]);
        //         if (unit != null) res.Add(context.Targets[i]);
        //     }
        //
        //
        //     if (res.Count > 0) return res;
        //
        //     // 将其他单位添入结果中
        //     foreach (var cell in context.Targets) {
        //         var unit = placeHolder.GetUnit(cell);
        //         if (unit == null) continue;
        //
        //         res.Add(cell);
        //         if (res.Count >= temp) {
        //             break;
        //         }
        //     }
        //
        //     return res;
        // }
    }
}